package com.smartitengineering.cms.repo.dao.impl.tx; import com.google.inject.AbstractModule; import com.google.inject.Singleton; import com.google.inject.assistedinject.FactoryModuleBuilder; import com.google.inject.matcher.Matchers; import com.smartitengineering.cms.repo.dao.tx.Transaction; import com.smartitengineering.cms.repo.dao.tx.TransactionManager; import com.smartitengineering.cms.repo.dao.tx.Transactional; /** * * @author imyousuf */ public class TransactionImplModule extends AbstractModule { @Override protected void configure() { bind(TransactionInMemoryCache.class).to(TransactionInMemoryCacheImpl.class).in(Singleton.class); bind(TransactionService.class).to(TransactionServiceImpl.class).in(Singleton.class); bind(TransactionManager.class).to(TransactionManagerImpl.class).in(Singleton.class); install(new FactoryModuleBuilder().implement(TransactionStoreKey.class, TransactionStoreKeyImpl.class).implement( TransactionStoreValue.class, TransactionStoreValueImpl.class).implement(Transaction.class, TransactionImpl.class). build(TransactionFactory.class)); TransactionalInterceptor interceptor = new TransactionalInterceptor(); super.requestInjection(interceptor); bindInterceptor(Matchers.any(), Matchers.annotatedWith(Transactional.class), interceptor); } }